package auto;

import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;

/**
 *
 * @author Jonas
 */
public class Location {
    private double latitude, longitude;
    private String road;
    private String[] crossing;
    public enum Category {DUUR,STANDAARD,GOEDKOOP};
    private Category category;
    private String description;
    // format1: [latitude,longitude] > Crossing(road A - road B)        * if crossing has received a name
    // format2: [latitude,longitude] > road A - road B                  * if crossing with no name
    // format3: [latitude,longitude] > road                             * if between 2 crossings, ie on one road

    public Location(double lat, double lon) {
        latitude = lat;
        longitude = lon;

        String location = translateCoordinates(lat, lon);
        if(location.contains("-")){
            road = "";
            crossing = new String[]{location.substring(0, location.indexOf('-')),location.substring(location.indexOf('-')+1, location.indexOf(':'))};

            if(location.indexOf(':')+1 != location.length())
                description = "["+latitude+","+longitude+"] > "+location.substring(location.indexOf(':')+1)+"("+crossing[0]+" - "+crossing[1]+")";
            else
                description = "["+latitude+","+longitude+"] > "+crossing[0]+" - "+crossing[1];
        }
        else{
            road = location;
            crossing = null;
            description = "["+lat+","+lon+"] > "+road;
        }
    }

    public double[] getCoordinates(){
        return new double[]{latitude,longitude};
    }

    public Category getCategory() {
        return category;
    }
    

    @Override
    public String toString() {
        return description;
    }

    private String translateCoordinates(double latitude,double longitude){
        // data van: www.gpscoordinaten.nl/bepaal-gps-coordinaten.php

        // crossings
        double eps = 0.00001;
        if(latitude > 50.789-eps && latitude < 50.789+eps && longitude > 3.230-eps && longitude < 3.230+eps){
            category = Category.DUUR;
            return "E17-E403:Aalbeke";
        }
            //"Brugge" verschoven om gemakkelijker te rekenen
        if(latitude > 51.011-eps && latitude < 51.011+eps && longitude > 3.230-eps && longitude < 3.230+eps){
            category = Category.DUUR;
            return "E403-E40:Brugge";
        }
        if(latitude > 51.011-eps && latitude < 51.011+eps && longitude > 3.726-eps && longitude < 3.726+eps){
            category = Category.DUUR;
            return "E40-E17:Zwijnaarde";
        }
        if(latitude > 50.871-eps && latitude < 50.871+eps && longitude > 3.443-eps && longitude < 3.443+eps){
            category = Category.DUUR;
            return "E17-N382:Afrit Waregem";
        }
        if(latitude > 50.882-eps && latitude < 50.882+eps && longitude > 3.416-eps && longitude < 3.416+eps){
            category = Category.STANDAARD;
            return "N382-Jozef Duthoystraat:";
        }
        if(latitude > 50.882-eps && latitude < 50.882+eps && longitude > 3.417-eps && longitude < 3.417+eps){
            category = Category.STANDAARD;
            return "Jozef Duthoystraat-Pijkstraat:";
        }
        if(latitude > 50.888-eps && latitude < 50.888+eps && longitude > 3.416-eps && longitude < 3.416+eps){
            category = Category.GOEDKOOP;
            return "Pijkstraat-Tjollensstraat:";
        }
        if(latitude > 50.888-eps && latitude < 50.888+eps && longitude > 3.418-eps && longitude < 3.418+eps){
            category = Category.GOEDKOOP;
            return "Broekstraat-Tjollensstraat:";
        }

        // no crossing: van klein naar groot
        if(latitude > 50.888-eps && latitude < 50.888+eps && longitude > 3.416+eps && longitude < 3.418-eps){
            category = Category.GOEDKOOP;
            return "Tjollensstraat";
        }
        if(latitude > 50.882+eps && latitude < 50.888-eps && longitude > 3.416+eps && longitude < 3.417-eps){
            category = Category.GOEDKOOP;
            return "Pijkstraat";
        }
        if(latitude > 50.882-eps && latitude < 50.882+eps && longitude > 3.416+eps && longitude < 3.417-eps){
            category = Category.GOEDKOOP;
            return "Jozef Duthoystraat";
        }
        // gewoon afgaan omdat we niet meer data beschouwen
        if(latitude > 50.871+eps && latitude < 50.882-eps && longitude > 3.416+eps && longitude < 3.443-eps){
            category = Category.STANDAARD;
            return "N382";
        }
        if(longitude > 3.230-eps && longitude < 3.230+eps){
            category = Category.DUUR;
            return "E403";
        }
        if(latitude > 51.011-eps && latitude < 51.011+eps){
            category = Category.DUUR;
            return "E40";
        }
        category = Category.DUUR;
        return "E17";
    }

    /*@Override
    public boolean equals(Object obj) {
        return this.description.equals(((Location)obj).description);
    }*/
}
